import dd from 'gdt-jsapi';
import request from '../utils/request';
Page({
  data: {
    date:'',
    userInfo:{},  
    loginInfo:{}, 
    animation: true,
    pickerVisible: false,
    checkedItems:[],
    orgIds:[],
    reportTime:'',
    SubordinateDt:[],
    showSubordinateDt:[],
    // scrollVisible:true,
    items: [
      {
        title: '第一项',
        checked:false,
        value:'1',
        children: [
          { title: '儿子第一项',checked:false,value:'1-1', children: [
            { title: '孙子第一项',checked:false,value:'1-1-1', children: [
              { title: '重孙子第一项', checked:false,value:'1-1-1-1',children: [] ,disabled: true},
              { title: '重孙子第二项',checked:false,value:'1-1-1-2', children: [] ,disabled: true}
            ] ,disabled: false},
            { title: '孙子第二项', checked:false,value:'1-1-2',children: [] ,disabled: true},
            { title: '孙子第三项',checked:false,value:'1-1-3', children: [] ,disabled: true}
          ]},
          { title: '儿子第二项',checked:false,value:'1-2', children: [] ,disabled: true},
          { title: '儿子第三项',checked:false, value:'1-3',children: [] ,disabled: true}
        ]
      },
      { title: '第二项',checked:false,value:'2', children: [] ,disabled: true},
      { title: '第三项',checked:false,value:'3', children: [] ,disabled: true}
    ],
    defaultDateMonth:'',
    defaultValueDept: '',
    //统计图数据绑定
    chartData:[],
    //表格数据绑定
    tableData:[],
  },
  // 图表初始化
  onInitChart(F2, config) {
    // console.log('config')
    // console.log(config)
    let chart = new F2.Chart(config);
    // 保存 chart 实例
    this.mychart = chart;
    // console.log();
    chart.source(this.data.chartData, {
        月份: {
            range: [0, 1]
        },
        growthRate: {
          // tickCount: 7, //坐标轴刻度个数(具体看数据渲染是X轴还是Y轴, 来操作对应轴的刻度数)
          formatter(val) { //格式化数据
            return val + '%'
            }    
          },
        value: {
            // tickCount: 5
        }
    });

    
    // chart.padding([100, 100, 100, 100]);
    // 绘制柱状图
    chart.interval().position('月份*value').color('name').adjust('dodge').size(10);

    // 绘制折线图
    chart.line().position('月份*growthRate').color('name').size(2).shape('smooth');

    // 绘制点
    chart.point().position('月份*growthRate').color('name').size(4).shape('circle');
    chart.legend('name', {
      position: 'top',
      offsetX: 40, // 设置图例间距
      itemMarginBottom: 10, // 设置每项之间的垂直间距
      marker: { symbol: 'circle', radius: 5 },
      textStyle: {
        fontSize: 20 // 调整图例字体大小
      }
    });
    chart.axis('月份', {
      label: {
        fontSize: 12, // 调整 X 轴字体大小
        rotate: Math.PI / 5 ,//旋转45°
        textAlign :'left'
      },
      labelOffset: 10, //坐标文本与轴线的距离
      // position: 'bottom' 
    });
    chart.axis('value', {
      label: {
        fontSize: 16, // 调整 X 轴字体大小
      },
      labelOffset: 20, //坐标文本与轴线的距离
    });

    chart.axis('growthRate', {
      label: {
        fontSize: 16, // 调整 X 轴字体大小
        // rotate: Math.PI / 4
        // offset: 100 // 将Y轴标签向右偏移10像素
        
      },
      grid:null,
      labelOffset: 20, //坐标文本与轴线的距离
    });
    chart.render();
    
    return chart;
  },
  //获取当前选择   传入token
  getNowDeptChildren(){
    dd.httpRequest({
      url: request.ipAddress +'/api/org/getSubordinate_Dt',
      method: 'POST',
      headers: { 
        'Content-Type': 'application/json',
        'token':this.data.userInfo.token
      },
      dataType: 'json'}).then(res => {
        let subordinateDt = res.data.list;
        
        // this.setData({
        //   SubordinateDt :  subordinateDt
        // });
        
        let showSubordinateDt =  this.addPropertyToTreeArray(subordinateDt);
        // console.log(showSubordinateDt);
        showSubordinateDt[0].checked = true;
        //保存一份最原始的单位树结构
        this.setData({
          SubordinateDt :  showSubordinateDt
        });
        //仅仅用来展示到页面
        this.setData({
          showSubordinateDt :  showSubordinateDt
        });
        this.setData({
          checkedItems:[showSubordinateDt[0]]
        });
        let arr = [];
        arr.push(showSubordinateDt[0].value);
        this.setData({orgIds:arr});
        //初次获取单位查询 第一个单位的统计数据
        this.getTableData();
      }).catch(err => {});
  },
  //上一页面选择好单位后  到此调用登录接口  真真登录 获取token信息
  login(loginInfo){
    // console.log(loginInfo);
    let params = {
      "username":  loginInfo.username,
      "password":  loginInfo.password,
      "captcha":  null,
      "orgId": loginInfo.orgId,
      "phone":  null,
      "zzdPasswordFlag":"1"
    };

    dd.httpRequest({
      url: request.ipAddress +'/api/system/login',
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      data : JSON.stringify(params),
      dataType: 'json'}).then(res => {
        let userInfo = res.data.pageData;        
        this.setData({
          userInfo :  userInfo
        });
        //获取当前涨到登陆单位的子单位
        this.getNowDeptChildren();
      }).catch(err => {});
  },
  onLoad(query) {
    this.setData({
      userInfo :  null
    });
    // 页面加载
    let loginInfo = JSON.parse(query.loginInfo);
    // console.log(loginInfo);
    this.setData({
      loginInfo:loginInfo,
    });   
    //初始查询当前月份数据
    const yearmon = this.getYearMonth();
    this.setData({
      reportTime:yearmon,
    });
    //获取token信息  保存至userinfo
    this.login(loginInfo);
  }, 
  handleOpenPicker() {
    this.setData({
        pickerVisible: true,
    });
  },
  handleShowScroll() {
    this.setData({ scrollVisible: true });
  },
  handlePopupClose() {
    this.setData({
        basicVisible: false,
        scrollVisible: false,
        closeVisible: false,
    });
  },
  //递归设置数组
  addPropertyToTreeArray(treeArray) {
    return treeArray.map(tree => this.addPropertyToTree(tree));
  },
  //递归添加属性
  addPropertyToTree(tree) {
    const midTree = { "checked":false,value: tree.orgId,title:  tree.name};
    // 根据children的长度来设置disabled属性
    let isDisabled = false;
    // 如果当前对象有子节点，则递归处理每个子节点，并替换为新对象的子节点
    if (tree.children && tree.children.length > 0) {
      midTree.children = tree.children.map(child => this.addPropertyToTree(child));
    }else{
      isDisabled = true;
      midTree.children = [];
    }
    // 创建当前对象的一个副本，并为副本添加新的属性，其值为指定字段的值
    const newTree = { ...midTree,"disabled":isDisabled };
    return newTree;
  },
  //日期更改 获取统计数据
  handleOk(date, format, e) {
    // console.log('onOk', date, format, e);
    this.setData({
      reportTime :  format
    });
    this.getTableData();
  },
  getTableData(){
    let params = {
      "orgId":  this.data.orgIds,
      "reportTime":  this.data.reportTime,
      "unit":  '元'
    };

    dd.httpRequest({
      url: request.ipAddress +'/api/financialMouthKuaiBaoZzd/sumDetailZzd',
      method: 'POST',
      headers: { 
        'Content-Type': 'application/json',
        'token':this.data.userInfo.token 
      },
      data : JSON.stringify(params),
      dataType: 'json'
    }).then(res => {
        // let userInfo = res.data.pageData;        
        this.setData({
          tableData :  res.data.pageData.tableData
        });
        this.setData({
          chartData :  res.data.pageData.chartData
        });
        //更新  统计图
        this.mychart.changeData(this.data.chartData);
      }).catch(err => {});
  },
  //单位列表更改 获取统计数据  
  onSubTab(items){
    // console.log("onSubTab");
    // console.log(items);
    this.setData({checkedItems:items});
    //获取当前循环中orgId的列表
    const valueArray = items.map(item => item.value);
    this.setData({orgIds:valueArray});
    // if(items.length>0){
      //发起请求 获取统计数据
      this.getTableData();      
    // }
  },
  //获取当前年月  year-mon
  getYearMonth(){
    const date = new Date();
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0'); // getMonth() 从 0 开始，所以要加 1

    const formattedDate = `${year}-${month}`;
    return formattedDate;
  },
  //筛选单位
  onChange(value, e){
    console.log(value);
    console.log(e);
    // let items = {...this.data.SubordinateDt}
    // this.setData({
    //   showSubordinateDt :  showSubordinateDt
    // });
    // const filteredItems = this.filterTreeByTitle(items, value);
    // console.log(JSON.stringify(filteredItems, null, 2));
    // this.setData({
    //   showSubordinateDt :  showSubordinateDt
    // });
  },
  //根据字符筛选树形结构
  filterTreeByTitle(tree, keyword) {
    // 递归函数，用于筛选树节点
    function filterNode(node) {
      // 如果当前节点的title包含关键词，保留节点
      const match = node.title.includes(keyword);
  
      // 递归检查子节点
      const filteredChildren = node.children
        .map(filterNode)   // 递归对子节点进行过滤
        .filter(child => child !== null); // 保留符合条件的子节点
  
      // 如果当前节点或其子节点匹配，返回这个节点并保留层级关系
      if (match || filteredChildren.length > 0) {
        return {
          ...node,
          children: filteredChildren  // 更新子节点为筛选后的结果
        };
      }
  
      // 如果当前节点及其子节点都不匹配，返回 null
      return null;
    }
  
    // 对树结构的每个根节点进行递归筛选
    return tree
      .map(filterNode)  // 过滤树的顶级节点
      .filter(node => node !== null);  // 移除不符合条件的顶级节点
  },
  onReady() {
    // 页面加载完成
  },
  onShow() {
    // 页面显示

  },
  onHide() {
    // 页面隐藏
  },
  onUnload() {
    // 页面被关闭
  },
  onTitleClick() {
    // 标题被点击
  },
  onPullDownRefresh() {
    // 页面被下拉
  },
  onReachBottom() {
    // 页面被拉到底部
  },
  onShareAppMessage() {
    // 返回自定义分享信息
    return {
      title: 'My App',
      desc: 'My App description',
      path: 'pages/index/index',
    };
  },
});
